/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package transervfx.Vista;

import java.io.IOException;
import java.net.URL;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Modality;
import javafx.stage.Stage;

/**
 *
 * @author oscar
 */
//esta es una clase abstracta, nunca puedo hacer new de ella, 
//como vez tiene el AnchorPane con id=root, q es obligatorio cuando haces el FXML
//tambien tiene la ventanaPadre, al crear una ventana tenes q heredar de esta clase
//esta clase se va a encargar de implementar el fxml
//solo te obliga a rescribir un metodos, q es la URL del fxml
//Vamos con un ejemplo
//una cosa, todas las ventanas heredan de esta?
//si, esto hace q te abstraiga de implementar lo del fxml, controlador etc
//si pero lo que era el controlador solo le cambiaste el nombre y le agregaste un constructor... no le veo la diferencia
//la diferencia esta en q el controlador ahora esta en la clase de la ventana, antes estaban separados
//antes el controlador tenia una relacion a la ventana, ahora el controlador es la propia ventana
//Una ventana es un Stage, el fxml es un archivo el cual posee los componentes de esa ventana
//esta clase extiende del Stage y le pone los componentes q estan definidos en el fxml
//igual esta clase nunca la vas a tocar, solo es para extenderla
//aja, o sea la verdadera ventana suiempre es un stage y el fxml define los componentes de ese stage
//claro
//pero sigo sin entender el tema dsel controlador: ahora el controlador no existe, el comportamiento va en la
//clase q extiende a esta.
//Fijate q ya no existe el paquete controlador, ahora es vista, el cual contiene todas las ventanas 
//o sea esas ventanas heredan de esta clase,
 //claro
//Entiendo lo q pensas
//El controlador es la propia ventana ahora. ejemplo:
//ABMRepartidor, es un aventana, y hace el control de ella misma( es decir no tiene controlador aparte) todo esta en su codigo.
//con un ejemplo lo vas a entender
//segui asi termino de entender
//pero entendiste?, no hay mas q explicar.
//pasos para hacer una ventana:
//1) crear una clase y q existienda de esta
//2) en la clase creada redefinir el metodo URLFXML el cual da la loccion del fxml y listo.
//si por lo que vi es mucho mas facil llamar ventanas y esas cosas, no es tanto codigo inentenduble
//por eso antes te dije q se podia hacer de otra forma, pero no quise mostrarte porq teniamos q cambiar, pero ahora es necesario
//te muestro como funka?ok
//primero vamos a crear una ventana VentanaMeli
//1)creo un EMPYFXML sin controlador (importante)
//2)al anchor le doy el fx:id=root y voy a Edicion-> use fx:root cosntructor en el scene buider
//esto lo q hace es definir el componente anchor como raiz primari, esta en la documentacion de oracle.
//fx:root le esta diciendo q el root va a ser un anchorPane, antes le decias q ibas a usar un controlador
//3)ahora creamos una clase java q extienda de esta, seria la ventana he implementamos el metodo q nos pide(URLFXML) y su contructor
//4) defino los componentes con los @fxml en la ventana
//5) le hago un new

abstract class VentanaModal extends Stage{
    
    @FXML
    protected AnchorPane root=new AnchorPane();
    
    protected Stage ventanaPadre;
   
  

    public VentanaModal(Stage ventanaPadre,String titulo,int x, int y) {
        this.ventanaPadre=ventanaPadre;
        FXMLLoader fxmlLoader = new FXMLLoader(getURLFXML());
        fxmlLoader.setRoot(root);
        fxmlLoader.setController(this);

        try {
            fxmlLoader.load();
            
        } catch (IOException exception) {
            throw new RuntimeException(exception);
        }
        this.initModality(Modality.APPLICATION_MODAL);
        this.setTitle(titulo);
       
        this.setScene(new Scene(root,x,y));
        this.show();
    }
    
    
    public void salir(){
        System.out.print("salir");
        this.close();
    }
    
    abstract URL getURLFXML();
}
